# -*- coding:utf-8 -*-

# https://requests.readthedocs.io/projects/cn/zh-cn/latest/
"""
GET 请求
"""
# 1、无参数实例

import requests
from requests import request

ret = requests.get('https://github.com/timeline.json')

print(ret.url)
print(ret.text)

# 2、有参数实例

payload = {'key1': 'value1', 'key2': 'value2'}
ret = requests.get("http://httpbin.org/get", params=payload)

print(ret.url)
print(ret.text)

"""
POST 请求
"""
# 1、基本POST实例

import requests

payload = {'key1': 'value1', 'key2': 'value2'}
ret = requests.post("http://httpbin.org/post", data=payload)

print(ret.text)

# 2、发送请求头和数据实例

import requests
import json

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
headers = {'content-type': 'application/json'}

ret = requests.post(url, data=json.dumps(payload), headers=headers)

print(ret.text)
print(ret.cookies)



"""
超时timeout
"""
import requests

url = 'http://mobile.xxuat.com.cn/mobile/p/xxxSearch.jsp'  # 接口地址

response = requests.post(url=url, data=data, timeout=0.1)  # post请求,timeout = 0.1设置超时时间

print(response.text)  # 打印接口返回信息

"""接口返回,print(response.text)：
{"traceID":"C713A65B72D743DA84CF86F4EED6618F","filterCatList":[],"goodsList":[],"isActivated":"Y","pageBar":{"pageNumber":1,"totalPage":0,"pageSize":15,"totalCount":0},"filterConList":[],"isSuccess":"Y"}
"""


"""
代理proxies
"""
proxies = {
    "http": "http://10.2.190.40:8888",
    "https": "http://10.2.190.40:8888",
}  # 设置代理

response = requests.get("http://www.baidu.com", proxies=proxies)  # 接口请求代理模式

print(response.text)

##接口设置了代理直接访问github网站是不通的，增加verify=False参数


"""
开关， 用于认证SSL证书， 默认为True，如果接口返回SSLError错误，需要请求时，verify=false；
verify
"""
import requests

proxies = {
    "http": "http://10.2.190.40:8888",
    "https": "http://10.2.190.40:8888",
}
url = 'https://github.com'
r = requests.get(url=url, proxies=proxies, verify=False)  ##接口设置了代理直接访问github网站是不通的，增加verify=False参数

print(r.text)

# flies  是用来向服务器传输文件时使用的字段

import requests

url = 'http://mobile.atguat.com.cn/mobile/p/wapSearch.jsp'  # 接口地址

data = {'body': '{"keyWord": "iphone"}'}  # 入参

fs = {'files': open('data.txt', 'rb')}  # 参数中上传的文件

response = requests.post(url=url, data=data, flies=fs)  # 接口请求中，files参数是上传文件用

print(response.text)



requests.get(url, params=None, **kwargs)
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.head(url, **kwargs)
requests.delete(url, **kwargs)
requests.patch(url, data=None, **kwargs)
requests.options(url, **kwargs)

# 以上方法均是在此方法的基础上构建
requests.request(method, url, **kwargs)


"""
解析XML
"""
from xml.etree import ElementTree as ET

# 使用第三方模块requests发送HTTP请求，或者XML格式内容
r = requests.get('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')
result = r.text

# 解析XML格式内容
node = ET.XML(result)

# 获取内容
if node.text == "Y":
    print("在线")
else:
    print("离线")


"""
查看响应类容###########################################################
"""

import requests

url = 'http://mobile.atguat.com.cn/mobile/p/wapSearch.jsp'

kw = {'wd': '长城'}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"}

response = requests.post(url=url, data=kw, headers=headers)

# 查看响应内容，response.text 返回的是Unicode格式的数据
print(response.text)

# 查看响应内容，response.content返回的字节流数据
print(response.json())

# 查看响应内容，response.content返回的字节流数据


import requests

url = 'http://mobile.xxuat.com.cn/mobile/p/xxSearch.jsp'

kw = {'wd': '长城'}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"}  # 请求头部

response = requests.post(url=url, data=kw, headers=headers)  # 接口返回信息

# 查看完整url地址
print(response.url)

"""
接口返回print (response.url)：url='http://mobile.xxuat.com.cn/mobile/p/xxSearch.jsp'
"""

# 查看响应头部字符编码
print(response.encoding)

 # 查看响应码
print(response.status_code)

#获取响应的headers
print (response.headers)

#获取响应的cookies
print (response.cookies)

# requests控制访问参数
# 1.params：形式：字典或字节序列，做为参数增加到url中
#
# 2.data: 形式：字典或字节序列
#     或文件对象，做为Requests的内容，可反馈给服务器
#
# 3.json：形式：JSON格式的数据
#     做为Requests的内容，可反馈给服务器
#
#     (ps:科普JSON(JavaScript Object Notation, JS 对象简谱)
#     是一种轻量级的数据交换格式。
#
# 4.headers: 形式：字典
#     HTTP定制头
#
# 5.cookies：形式：字典或cookie
#     Jar（从HTTP协议中解析得来）是Requests中的cookie
#
#     （ps：管理HTTP
#     cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中，
#
#     对CookieJar实例进行垃圾回收后cookie也将丢失。）
#
# 6.auth：形式：元组
#     支持HTTP的认证功能
#
# 7.files: 形式：字典类型用于向服务器传输文件
#
# 8.timeout：形式：数字
#     单位是s（秒）用于设置超时时间，防止爬取时间过长，无效爬取
#
# 9.prixies：形式：字典类型
#     设定访问代理服务器，可以增加登录认证。（防止爬虫逆追踪）
#
# 10.allow_redirects: 形式：布尔类型（True or False）默认为True
#     重定向开关
#
# 11.stream：布尔类型（True or False）默认为Ture
#     获取内容立即下载
#     开关
#
# 12.verify：布尔类型（True or False）默认为Ture
#     认证SSL证书开关
#
# 13.cert：　保存本地证书路径
